package com.macro.mall.service.impl;


import com.github.pagehelper.PageHelper;
import com.macro.mall.common.exception.Asserts;
import com.macro.mall.mapper.CurDeptCourseTypeRelMapper;
import com.macro.mall.mapper.UmsDeptMapper;
import com.macro.mall.model.UmsDept;
import com.macro.mall.service.UmsDeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Service
public class UmsDeptServiceImpl implements UmsDeptService {

    @Autowired
    private UmsDeptMapper umsDeptMapper;
    @Autowired
    private CurDeptCourseTypeRelMapper curDeptCourseTypeRelMapper;


    /**
     * 保存
     * 所有字段全都保存
     *
     * @param umsDept
     * @return 保存后的对象包括ID
     */
    @Override
    public int saveUmsDept(UmsDept umsDept) {
        /**if(umsDept.getId()==null||umsDept.getId()==""){
         *      String uuid =UUID.randomUUID().toString().replace("-", "").trim();
         *     umsDept.setId(uuid);
         */
        return umsDeptMapper.saveUmsDept(umsDept);
    }

    /**
     * 保存
     * 判断为空保存
     *
     * @param umsDept
     * @return 保存后的对象包括ID
     */
    @Override
    public int saveUmsDeptSelective(UmsDept umsDept) {
        /**if(umsDept.getId()==null||umsDept.getId()==""){
         *      String uuid =UUID.randomUUID().toString().replace("-", "").trim();
         *     umsDept.setId(uuid);
         */
        int i = umsDeptMapper.saveUmsDeptSelective(umsDept);
        curDeptCourseTypeRelMapper.saveCurDeptCourseTypeRelSelectiveList(umsDept.getId(), umsDept.getDeptRangeList());
        return i;
    }

    /**
     * 根据ID删除
     *
     * @param id 主键ID
     * @return 删除记录数
     */
    @Override
    public int deleteUmsDeptById(String id) {

        return umsDeptMapper.deleteUmsDeptById(id);
    }

    /**
     * 更新
     * 更新所有字段
     *
     * @param umsDept
     * @return 保存后的对象包括ID
     */
    @Override
    public int updateUmsDept(UmsDept umsDept) {

        return umsDeptMapper.updateUmsDept(umsDept);
    }

    /**
     * 更新
     * 判断为空保存更新字段
     *
     * @param umsDept
     * @return 保存后的对象包括ID
     */
    @Override
    @Transactional
    public int updateUmsDeptSelective(UmsDept umsDept) {
        curDeptCourseTypeRelMapper.deleteCurDeptCourseTypeRelById(null, String.valueOf(umsDept.getId()));
        curDeptCourseTypeRelMapper.saveCurDeptCourseTypeRelSelectiveList(umsDept.getId(), umsDept.getDeptRangeList());
        return umsDeptMapper.updateUmsDeptSelective(umsDept);
    }

    /**
     * 按ID查询
     *
     * @return UmsDept
     * @parm id 主键ID
     */
    @Override
    public UmsDept selectUmsDeptById(String id) {

        return umsDeptMapper.selectUmsDeptById(id);
    }


    /**
     * 按条件查询全部的
     *
     * @param umsDept 查询条件
     * @return List<UmsDept>
     */
    @Override
    public List<UmsDept> selectAllByUmsDept(UmsDept umsDept) {

        return umsDeptMapper.selectAllByUmsDept(umsDept);
    }


    @Override
    public List<UmsDept> selectAllByUmsDeptAndRange(String deptName, Integer deptType, String deptRange, Integer pageSize, Integer pageNum) {
        try {
            PageHelper.startPage(pageNum, pageSize);
            PageHelper.orderBy("ud.create_time desc");
            UmsDept umsDept = new UmsDept();
            umsDept.setDeptName(deptName);
            umsDept.setDeptType(deptType);
            umsDept.setDeptRange(deptRange);
            return umsDeptMapper.selectAllByUmsDeptAndRange(umsDept);
        } catch (Exception e) {
            log.error("",e);
            Asserts.fail("查询失败");
            return new ArrayList<>();
        }
    }

    @Override
    public void updateStatus(UmsDept umsDept) {
        umsDeptMapper.updateUmsDeptSelective(umsDept);
    }

}